using System;
using System.DHTML;
using Ext;
using Ext.data;
using Ext.grid;
using Ext.util;
using ScriptFX;

namespace SampleScripts.grid {
    public class GroupingGridScript {
        public static void main(Dictionary args) {
            ExtClass.onReady(new AnonymousDelegate(delegate() { new GroupingGridScript().init(); }));
        }

        public void init() {
            ArrayReader reader = new ArrayReader(
                new ArrayReaderConfig().ToDictionary(), 
                new Dictionary[] {
                    new Dictionary("name", "company"),
                    new Dictionary("name", "price", "type", "float"),
                    new Dictionary("name", "change", "type", "float"),
                    new Dictionary("name", "pctChange", "type", "float"),
                    new Dictionary("name", "lastChange", "type", "date", "dateFormat", "n/j h:ia"),
                    new Dictionary("name", "industry"),
                    new Dictionary("name", "desc")
                }
            );

            GroupingStore gds = new GroupingStore(new GroupingStoreConfig()
                .reader(reader)
                .data(GetData())
                .sortInfo(new Dictionary("field", "company", "direction", "ASC"))
                .groupField("industry")
                .ToDictionary()
            );

            Dictionary[] columns = new Dictionary[] {
                new Dictionary("id", "company", "header", "Company", "width", 60, "sortable", true, "dataIndex", "company"),
                new Dictionary("header", "Price", "width", 20, "sortable", true, "renderer", new MoneyRenderer(Format.usMoney), "dataIndex", "price"),
                new Dictionary("header", "Change", "width", 20, "sortable", true, "dataIndex", "change", "renderer", new MoneyRenderer(Format.usMoney)),
                new Dictionary("header", "Industry", "width", 20, "sortable", true, "dataIndex", "industry"),
                new Dictionary("header", "Last Updated", "width", 20, "sortable", true, "renderer", Format.dateRenderer("m/d/Y"), "dataIndex", "lastChange")
            };


            GroupingView view = new GroupingView(new GroupingViewConfig()
                .forceFit(true)
                .groupTextTpl("{text} ({[values.rs.length]} {[values.rs.length > 1 ? \"Items\" : \"Item\"]})")
                .ToDictionary()
            );

            GridPanel grid = new GridPanel(new GridPanelConfig()
                .ds(gds)
                .columns(columns)
                .view(view)
                .frame(true)
                .width(700)
                .height(400)
                .collapsible(true)
                .animCollapse(false)
                .title("Grouping Example")
                .iconCls("icon-grid")
                .ToDictionary()
            );
            grid.render(Document.Body);
        }
        private object[] GetData() {
            return new object[] {
                new object[] {"3m Co",71.72,0.02,0.03,"4/2 12:00am", "Manufacturing"},
                new object[] {"Alcoa Inc",29.01,0.42,1.47,"4/1 12:00am", "Manufacturing"},
                new object[] {"Altria Group Inc",83.81,0.28,0.34,"4/3 12:00am", "Manufacturing"},
                new object[] {"American Express Company",52.55,0.01,0.02,"4/8 12:00am", "Finance"},
                new object[] {"American International Group, Inc.",64.13,0.31,0.49,"4/1 12:00am", "Services"},
                new object[] {"AT&T Inc.",31.61,-0.48,-1.54,"4/8 12:00am", "Services"},
                new object[] {"Boeing Co.",75.43,0.53,0.71,"4/8 12:00am", "Manufacturing"},
                new object[] {"Caterpillar Inc.",67.27,0.92,1.39,"4/1 12:00am", "Services"},
                new object[] {"Citigroup, Inc.",49.37,0.02,0.04,"4/4 12:00am", "Finance"},
                new object[] {"E.I. du Pont de Nemours and Company",40.48,0.51,1.28,"4/1 12:00am", "Manufacturing"},
                new object[] {"Exxon Mobil Corp",68.1,-0.43,-0.64,"4/3 12:00am", "Manufacturing"},
                new object[] {"General Electric Company",34.14,-0.08,-0.23,"4/3 12:00am", "Manufacturing"},
                new object[] {"General Motors Corporation",30.27,1.09,3.74,"4/3 12:00am", "Automotive"},
                new object[] {"Hewlett-Packard Co.",36.53,-0.03,-0.08,"4/3 12:00am", "Computer"},
                new object[] {"Honeywell Intl Inc",38.77,0.05,0.13,"4/3 12:00am", "Manufacturing"},
                new object[] {"Intel Corporation",19.88,0.31,1.58,"4/2 12:00am", "Computer"},
                new object[] {"International Business Machines",81.41,0.44,0.54,"4/1 12:00am", "Computer"},
                new object[] {"Johnson & Johnson",64.72,0.06,0.09,"4/2 12:00am", "Medical"},
                new object[] {"JP Morgan & Chase & Co",45.73,0.07,0.15,"4/2 12:00am", "Finance"},
                new object[] {"McDonald\"s Corporation",36.76,0.86,2.40,"4/2 12:00am", "Food"},
                new object[] {"Merck & Co., Inc.",40.96,0.41,1.01,"4/2 12:00am", "Medical"},
                new object[] {"Microsoft Corporation",25.84,0.14,0.54,"4/2 12:00am", "Computer"},
                new object[] {"Pfizer Inc",27.96,0.4,1.45,"4/8 12:00am", "Services", "Medical"},
                new object[] {"The Coca-Cola Company",45.07,0.26,0.58,"4/1 12:00am", "Food"},
                new object[] {"The Home Depot, Inc.",34.64,0.35,1.02,"4/8 12:00am", "Retail"},
                new object[] {"The Procter & Gamble Company",61.91,0.01,0.02,"4/1 12:00am", "Manufacturing"},
                new object[] {"United Technologies Corporation",63.26,0.55,0.88,"4/1 12:00am", "Computer"},
                new object[] {"Verizon Communications",35.57,0.39,1.11,"4/3 12:00am", "Services"},
                new object[] {"Wal-Mart Stores, Inc.",45.45,0.73,1.63,"4/3 12:00am", "Retail"},
                new object[] {"Walt Disney Company (The) (Holding Company)",29.89,0.24,0.81,"4/1 12:00am", "Services"}
            };
        }
    }
}
